﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Web.Security;


using Intelsi.Entity;
using Intelsi.BusinessLogic;
using Microsoft.Practices.Unity;



namespace Intelsi.WB
{
    public partial class NewFrmPedido : System.Web.UI.Page
    {
        [Dependency]
        public IProyectoBL proyectoBL { get; set; }

        [Dependency]
        public IProductoBL productoBL { get; set; }

        [Dependency]
        public ITrabajadorBL trabajadorBL { get; set; }

        [Dependency]
        public IPedidoBL pedidoBL { get; set; }

        [Dependency]
        public ICategoriaBL categoriaBL { get; set; }

      
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {
                var acc = Request.QueryString["acc"];

                string userName = HttpContext.Current.User.Identity.Name;
                var trabajador1 = trabajadorBL.GetFromTrabajadorByCorreoCorporativo(userName);
                string cargo = trabajador1.Cargo;

                if (acc == "nuevo")
                {
                    txtNumPedido.Text = "0";
                    txtFechaPedido.Text = DateTime.Now.ToShortDateString();
                    


                    var Pedido = new PedidoDTO();
                    Nuevo(Pedido);

                   

                }

                if (acc == "editar")
                {
                    var IdPedido = Int32.Parse(Request.QueryString["IdPedido"]);
                    var pedido = pedidoBL.GetfromPedidoByIdPedido(IdPedido);

                   

                    bindPedido(pedido);
                }
                
            }
       
        }

        private void Nuevo(PedidoDTO pedido)
        {
            

            string userName = HttpContext.Current.User.Identity.Name;
            var trabajador1 = trabajadorBL.GetFromTrabajadorByCorreoCorporativo(userName);

           

            hfIdSupervisor.Value = trabajador1.IdTrabajador.ToString();
            txtnomsupervisor.Text = trabajador1.Ape_Nomb;
            txtDnisupervisro.Text = trabajador1.DNI;
            txtCelularSupervisor.Text = trabajador1.Celular;
            txtNumFotochetSuper.Text = trabajador1.NumFotocheck;

            pedido.IdPedido = 0;
            pedido.FechaPedio = DateTime.Now;
            pedido.IdSupervisor = Int32.Parse(hfIdSupervisor.Value);
            pedido.NombreSuper = txtnomsupervisor.Text;
            pedido.dniSuper = txtDnisupervisro.Text;
            pedido.celularSuper = txtCelularSupervisor.Text;
            pedido.numFotochSuper = txtNumFotochetSuper.Text;

            bindPedido(pedido);


            

        



        }

        protected void BtnAgregarProductos_Click(object sender, EventArgs e)
        {
            var pedido = Cache.Get("pedido") as PedidoDTO;

             var query = from p in pedido.DetallePedido
                            where p.IdProducto.Equals(Int32.Parse(HfIdProducto.Value))
                            select p;

               

                if (query.SingleOrDefault() == null)
                {
                    var detalle = new DetallePedidoDTO();
                    {
                        detalle.IdPedido = pedido.IdPedido;
                        detalle.IdProducto = Int32.Parse(HfIdProducto.Value);
                       detalle. Codigo = txtCodigoProducto.Text;
                        detalle.Descripcion = TxtDescripcionProductos.Text;
                       detalle. NombreMarca = TxtMarca.Text;
                        detalle.Cantidad = decimal.Parse(txtcantidadProductos.Text);

                        if (txtCodigoProducto.Text != "")
                        {
                            detalle.Existencia = true;
                        }
                        else
                        {
                            detalle.Existencia = false;
                        }


                    };

                    pedido.DetallePedido.Add(detalle);

                    TxtDescripcionProductos.Text = "";
                    txtCodigoProducto.Text = "";
                    txtcantidadProductos.Text = "";
                    TxtMarca.Text = "";

                    UpdateCache(pedido);
                
                }

                else
                    if (query.SingleOrDefault() != null)
                    {

                        Page.ClientScript.RegisterStartupScript(this.GetType(),
                         "mensaje",
                            "<script type=\"text/javascript\">" +
                               "alert(\"El Producto ya se encuentra en la Lista\");" +
                                 "</script>", false);
                    }
        }


        private void UpdateCache(PedidoDTO pedido)
        {
            pedido.FechaPedio = DateTime.Parse(txtFechaPedido.Text);
            pedido.IdSupervisor = Int32.Parse(hfIdSupervisor.Value);
            pedido.NombreSuper = txtnomsupervisor.Text;
            pedido.dniSuper = txtDnisupervisro.Text;
            pedido.numFotochSuper = txtNumFotochetSuper.Text;
            pedido.celularSuper = txtCelularSupervisor.Text;

            pedido.IdProyecto = Int32.Parse(hfIdProyecto.Value);
            pedido.Descripcion = txtDescripcionProyecto.Text;
            pedido.ordenServicio = txtOrdenServicio.Text;
            pedido.empresa = TxtEmpresa.Text;

            //  foreach (GridViewRow item in GrillaPedido.Rows)

            foreach (GridViewRow item in GrillaPedido.Rows)
            {
                var txtcatidad = item.FindControl("txtcantidad") as TextBox;

                var numero = item.DataItemIndex;

                if (numero > item.DataItemIndex)
                { 
                pedido.DetallePedido[item.DataItemIndex].Cantidad = decimal.Parse(txtcatidad.Text);
                
                }
            }
            bindPedido(pedido);
        }

        private void bindPedido(PedidoDTO pedido)
        {
            Cache.Insert("pedido", pedido);

            txtNumPedido.Text = pedido.IdPedido.ToString();
            txtFechaPedido.Text = pedido.FechaPedio.ToShortDateString();

            hfIdSupervisor.Value = pedido.IdSupervisor.ToString();
            txtnomsupervisor.Text = pedido.NombreSuper;
            txtDnisupervisro.Text = pedido.dniSuper;
            txtNumFotochetSuper.Text = pedido.numFotochSuper;
            txtCelularSupervisor.Text = pedido.celularSuper;

            hfIdProyecto.Value = pedido.IdProyecto.ToString();
            txtDescripcionProyecto.Text = pedido.Descripcion;
            txtOrdenServicio.Text = pedido.ordenServicio;
            TxtEmpresa.Text = pedido.empresa;

            GrillaPedido.DataSource = pedido.DetallePedido;
            GrillaPedido.DataBind();

        }

        protected void Guardar_Click(object sender, EventArgs e)
        {
            var Pedido = Cache.Get("pedido") as PedidoDTO;

            UpdateCache(Pedido);

            try
            {
                pedidoBL.RegistarPedido(Pedido);
                Page.ClientScript.RegisterStartupScript(this.GetType(),
                        "mensaje",
                           "<script type=\"text/javascript\">" +
                              "alert(\"Se ha Guardado Exitosamente\");" +
                                "</script>", false);
               
            }
            catch (Exception)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(),
                        "mensaje",
                           "<script type=\"text/javascript\">" +
                              "alert(\"Error..verifique los Datos\");" +
                                "</script>", false);
                
            }
        }

        protected void GrillaPedido_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Quitar")
            {
                var arg = int.Parse(e.CommandArgument.ToString());

                 var pedido = Cache.Get("pedido") as PedidoDTO;

                if (pedido.DetallePedido.Count > 0)
                {
                    
                     var detalle = (from p in pedido.DetallePedido
                                where p.IdProducto.Equals(arg)
                                   select p).SingleOrDefault();

                    if (detalle.Item == 0)
                    {
                        pedido.DetallePedido.Remove(detalle);
                    }
                    else
                    {
                        pedido.DetallePedido.Remove(detalle);
                    }

                    UpdateCache(pedido);
                }
            }
        }

        protected void NewCategoria_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = categoriaBL;
        }

        protected void LinkGuardarproducto_Click(object sender, EventArgs e)
        {
            if (txtDesProductoNuevo.Text != null && txtnuevamarca.Text!=null)
            {
                Producto producto = new Producto()
                {
                    Nombre = txtDesProductoNuevo.Text,
                    IdMarca = Int32.Parse(hdNewprodmarca.Value),
                    IdCategoria = Int32.Parse(CategoriaProductos.SelectedValue),


                };

                productoBL.RegistarProducto(producto);
                
               
                Page.ClientScript.RegisterStartupScript(this.GetType(),
                      "mensaje",
                         "<script type=\"text/javascript\">" +
                            "alert(\"Se ha Guardado Exitosamente !!\");" +
                              "</script>", false);

                LinkButton1_ModalPopupExtender.Hide();
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(),
                       "mensaje",
                          "<script type=\"text/javascript\">" +
                             "alert(\"Error..No ha llenado los Datos correctamente\");" +
                               "</script>", false);
            }
        }
    }
}